#ifndef TM_ABSTRACT_HEADER
#define TM_ABSTRACT_HEADER
#include<string>
#include<fstream>
#include<sstream>
#include<iostream>
#include<algorithm>
#include<iterator>
#include<vector>
#include<map>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include "def.hpp"
#include "utils.hpp"

class GenericTopicModel{
protected:
public:
  DocList TM_DOCS;
  int LEARNING_MODE; // option: 0 -- batch mode
                     // option: 1 -- online mode
  int READ_MODE; // indicate what kind of input format should be adapted.
                 // option: 0 -- repeat the same token multiple times, save assignments .for gibbs sampling 
                 // option: 1 -- save the same token once and save the counts. for vb
  int MAX_INT;
  GenericTopicModel();
  virtual void Inference()=0;
  virtual void Prediction()=0;
  virtual double Likelihood()=0;
  virtual int ReadDOCS()=0; // read documents from the disk
  virtual int GetDocuments(int)=0; // this indicate how documents are read through into the model
  virtual int SaveModel()=0;
  virtual int Interactive()=0;
  virtual ~GenericTopicModel(){};
};

GenericTopicModel::GenericTopicModel(){
  MAX_INT = 0;
  READ_MODE = 1; // default mode
  LEARNING_MODE = 0; // batch learning as the default learning mode
}

#endif
